const db = require('../config/db'); // 导入数据库配置
const { pool } = require('../config/db'); // 引入连接池

class Category {
  /**
   * 获取所有宠物分类
   * @returns {Promise<Array>} 分类对象数组
   */
  static async getAll() {
    try {
      // 获取数据库连接
      const connection = await db.getConnection();
      // 执行查询，获取所有分类，按名称排序
      const [rows] = await connection.execute(
        'SELECT * FROM categories ORDER BY name'
      );
      // 释放连接回连接池
      connection.release();
      return rows;
    } catch (error) {
      console.error('获取分类列表出错:', error);
      throw error;
    }
  }

  /**
   * 兼容MongoDB风格的find方法，用于admin.js等处的调用
   * @param {Object} filter 过滤条件 (可选)
   * @returns {Promise<Array>} 分类对象数组
   */
  static async find(filter = {}) {
    try {
      // 查询所有宠物类别
      const [rows] = await pool.query('SELECT * FROM pet_categories ORDER BY name');
      return rows;
    } catch (error) {
      console.error('获取宠物类别出错:', error);
      throw error;
    }
  }

  /**
   * 根据ID获取分类
   * @param {number} id 分类ID
   * @returns {Promise<Object|null>} 分类对象或未找到时返回null
   */
  static async getById(id) {
    try {
      // 获取数据库连接
      const connection = await db.getConnection();
      // 执行查询，通过ID查找分类
      const [rows] = await connection.execute(
        'SELECT * FROM categories WHERE id = ?',
        [id]
      );
      // 释放连接
      connection.release();
      // 返回找到的分类，如果没有找到则返回null
      return rows.length ? rows[0] : null;
    } catch (error) {
      console.error(`获取分类(ID=${id})出错:`, error);
      throw error;
    }
  }

  /**
   * 创建新分类
   * @param {Object} categoryData 分类数据
   * @param {string} categoryData.name 分类名称
   * @param {string} categoryData.description 分类描述
   * @returns {Promise<number>} 创建的分类ID
   */
  static async create(categoryData) {
    try {
      const { name, description } = categoryData;
      
      // 获取数据库连接
      const connection = await db.getConnection();
      // 执行插入操作
      const [result] = await connection.execute(
        'INSERT INTO categories (name, description) VALUES (?, ?)',
        [name, description]
      );
      // 释放连接
      connection.release();
      
      // 返回新创建分类的ID
      return result.insertId;
    } catch (error) {
      console.error('创建分类出错:', error);
      throw error;
    }
  }

  /**
   * 更新分类信息
   * @param {number} id 分类ID
   * @param {Object} categoryData 分类数据
   * @param {string} categoryData.name 分类名称
   * @param {string} categoryData.description 分类描述
   * @returns {Promise<boolean>} 更新成功返回true
   */
  static async update(id, categoryData) {
    try {
      const { name, description } = categoryData;
      
      // 获取数据库连接
      const connection = await db.getConnection();
      // 执行更新操作
      const [result] = await connection.execute(
        'UPDATE categories SET name = ?, description = ? WHERE id = ?',
        [name, description, id]
      );
      // 释放连接
      connection.release();
      
      // 返回是否成功更新（影响的行数大于0）
      return result.affectedRows > 0;
    } catch (error) {
      console.error(`更新分类(ID=${id})出错:`, error);
      throw error;
    }
  }

  /**
   * 删除分类
   * @param {number} id 分类ID
   * @returns {Promise<boolean>} 删除成功返回true
   */
  static async delete(id) {
    try {
      // 获取数据库连接
      const connection = await db.getConnection();
      // 执行删除操作
      const [result] = await connection.execute(
        'DELETE FROM categories WHERE id = ?',
        [id]
      );
      // 释放连接
      connection.release();
      
      // 返回是否成功删除（影响的行数大于0）
      return result.affectedRows > 0;
    } catch (error) {
      console.error(`删除分类(ID=${id})出错:`, error);
      throw error;
    }
  }
}

module.exports = Category; 